﻿package com.zhiyou.utils;

import java.io.IOException;

import java.util.Map;
import java.util.Properties;



import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradePagePayRequest;

/* *
 *类名：AlipayConfig
 *功能：基础配置类
 *详细：设置帐户有关信息及返回路径
 *修改日期：2017-04-05
 *说明：
 *以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用，只是提供一个参考。
 */

public class AlipayConfig{


	// ↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

	// 应用ID,您的APPID，收款账号既是您的APPID对应支付宝账号
	public static String app_id;

	// 商户私钥，您的PKCS8格式RSA2私钥
	public static String merchant_private_key;

	// 对应APPID下的支付宝公钥。
	public static String alipay_public_key;


	// 页面跳转同步通知页面路径 需http://格式的完整路径，不能加?id=123这类自定义参数，必须外网可以正常访问
	public static String return_url;

	// 签名方式
	public static String sign_type;

	// 字符编码格式
	public static String charset;

	// 支付宝网关
	public static String gatewayUrl;
	// 读取配置文件
	static {
		try {
			// 创建属性文件
			Properties properties = new Properties();
			// 将读取的内容读取属性文件
			properties.load(AlipayConfig.class.getResourceAsStream("/Alipay.properties"));
			// 获取到其中的值，赋值给上面的常量
			app_id = properties.getProperty("app_id");
			merchant_private_key = properties.getProperty("merchant_private_key");
			alipay_public_key = properties.getProperty("alipay_public_key");
			return_url = properties.getProperty("return_url");
			charset = properties.getProperty("charset");
			sign_type = properties.getProperty("sign_type");
			gatewayUrl = properties.getProperty("gatewayUrl");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * 
	 * @param orderID
	 *            商户订单号，商户网站订单系统中唯一订单号，必填
	 * @param total_amount
	 *            付款金额，必填
	 * @param subject
	 *            订单名称，必填
	 * @param body
	 *            商品描述，可空
	 * @throws IOException
	 * @throws AlipayApiException 
	 */
	public static String pay(String orderID, String total_amount, String subject, String body) throws IOException, AlipayApiException {

		// 获得初始化的AlipayClient
		AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, app_id, merchant_private_key, "json", charset,
				alipay_public_key, sign_type); 

		// 设置请求参数
		AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
		alipayRequest.setReturnUrl(AlipayConfig.return_url);

		// 向支付宝请求中传入订单号，付款金额，订单信息等
		alipayRequest.setBizContent("{\"out_trade_no\":\"" + orderID + "\"," + "\"total_amount\":\"" + total_amount
				+ "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\","
				+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
		// 返回的字符串
		String result = alipayClient.pageExecute(alipayRequest).getBody();	
		return result;
	}

	/**
	 * 用户扫码付款后的回调函数
	 */
	public static Boolean updateOrder(Map<String, String> params) {
		try {
			// 调用sdk验证签名
			boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key,
					AlipayConfig.charset, AlipayConfig.sign_type); // 调用SDK验证签名
			return signVerified;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}
}
